\chapter{相关技术基础}
\section{智能合约部分}
\subsection{Truffle框架}
Truffle\cite{wimmer2012truffle}是使用以太坊虚拟机的区块链开发环境与测试框架
\cite{区块链DAPP开发入门、代码实现、场景应用}，
旨在让区块链的开发工作更轻松。Truffle具有以下特点：
\begin{itemize}
  \item 内置智能合约编译、链接、部署和编译结果管理。
  \item 能够快速完成的自动化智能合约测试。
  \item 容易编写可扩展的部署和迁移脚本。
  \item 实现公共和专用区块链网络的管理。
  \item 使用ERC190标准的 EthPM 和 NPM 进行依赖包管理。
  \item 具有直接与智能合约通信的交互式控制台。
  \item 可配置的构建流，支持集成构建。
  \item 可在 Truffle 环境中执行外部脚本。
\end{itemize}

\subsection{Ganache工具}
Ganache\cite{lee2019testing}是一个以太坊模拟器，能够快速创建
以太坊开发的本地区块链，
它使开发以太坊应用程序更快、更容易、更安全。
它包含所有流行的RPC功能和特性（如事件），
可以使基于以太坊的区块链应用开发变得轻而易举。
\begin{itemize}
  \item 零配置实现从主网分叉。
  \item 分叉任何以太坊网络而无需等待同步。
  \item 支持以太坊 JSON-RPC 支持，可以轻松实现网页图形化界面。
  \item 具有快照/恢复的功能，对于状态化的单元测试非常有用。
  \item 对于矿工的运作方式是可变的，包含：即时、按需或间隔地挖掘块。
  \item 可以快进时间，对于一些与时间相关的区块链应用可以加速项目的开发测试。
  \item 可以在不需要私钥的情况下模拟任何帐户，可以轻松与其他钱包对接。
\end{itemize}


\section{后端部分}
\subsection{Node.js后端}
Node.js是一个开源的、跨平台的、后端JavaScript运行环境，
它在V8引擎上运行并在Web浏览器之外执行JavaScript代码。
Node.js允许开发人员使用JavaScript
编写命令行工具和服务器端脚本；
它允许开发人员在将页面发送到用户Web浏览器之前，
在服务器端运行脚本以生成动态网页内容。
它的出现统一了Web应用程序，
不像以前针对服务器端和客户端脚本使用不同的语言，
它的出现使得项目开发围绕单一编程语言进行变成可能。

同样Node.js具有能够异步I/O的事件驱动架构。
这些设计选择旨在优化具有许多输入/输出操作的Web
应用程序以及实时Web应用程序（例如，实时通
信程序和浏览器游戏）的吞吐量和可扩展性。
他还有优秀的依赖包管理器，项目中包的依赖
局限于文件夹，并不会影响其他文件夹的项目。
这种优点在多项目同时开发并且项目之间有依赖冲突时效果显著。

\subsection{ORM}
ORM 全称是Object–relational mapping，
即对象关系映射，是一种使用面向对象的编程语言
在类型系统之间转换数据的编程技术。
这实际上创建了一个可以
在编程语言中使用的“虚拟对象数据库”。
对数据库的简单访问可以屏蔽对应的SQL语句，
使得代码可读性显著增强，
对于复杂SQL语句也可以实现定制化的访问操作，
使得项目兼具可读性与高效性。


\section{前端部分}
\subsection{React与Ant Design of React}
React\cite{gackenheimer2015introduction}（也称为React.js）是一个免费的开源前端JavaScript
库，用于构建基于组件的用户界面，它由Meta公司和社区维护。
React可以用作开发单页、移动或服务器渲染应用程序的基础。
Ant Design of React是基于 Ant Design设计体系的React UI组件库，
而Ant Design 是一个 UI 设计语言，起源于蚂蚁金服体验技术部，
是一套提炼和应用于企业级后台产品的交互语言和视觉体系。
它统一了前端 UI 的设计，屏蔽了各种不必要的设计差异，
降低了前端实现的成本。
它具有以下特性：
\begin{itemize}
  \item 灵活的交互语言与和谐的视觉风格。
  \item 开箱即用的高质量 React 组件。
  \item 具有完备的设计工具体系。
  \item 支持数十个国际化语言。
  \item 强大而细腻的主题定制能力。
\end{itemize}

\subsection{Axios}
Axios是一个基于promise的网络请求库，
作用于node.js和浏览器中。
它对于服务端和客户端屏蔽了实现细节，
采用同一套API接口，
它在服务端它使用原生node.js的http模块,
而在客户端浏览器中则使用XMLHttpRequests。
这样同一套代码就可以免修改地直接运行在浏览器和node.js中。

\section{前后端与区块链交互}
\subsection{web3js}
web3js库是一组包含以太坊生态系统功能的模块。
我们主要使用web3-eth与web3-utils。其中
web3-eth主要用于以太坊区块链和智能合约；
web3-utils主要包含对 Dapp 开发人员有用的帮助函数。

\subsection{Metamask}
MetaMask是一个浏览器扩展，用于在浏览器中访问支持
以太坊的分布式应用程序！
该扩展将以太坊web3API注入到每个网站的javascript
上下文中，以便应用程序可以从访问智能合约。

\section{本章小结}
本章主要从项目实现的角度介绍了所使用的工具，
这些工具中包含\ref{charp:science}章节中所述概念的实现。
